package co.baiku.boot.v3.request;

import co.baiku.boot.v3.model.WeixinPayScorePostDiscounts;
import co.baiku.boot.v3.model.WeixinPayScorePostPayment;
import co.baiku.boot.v3.model.WeixinPayScoreRequest;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

/**
 * 修改订单金额API
 * <pre>
 * 前置条件：服务订单支付状态为待支付
 * 限制条件：同一笔订单仅能修改1次
 * 完结订单总金额与实际金额不符时，可通过该接口修改订单金额。
 * 例如：充电宝场景，由于机器计费问题导致商户完结订单时扣除用户99元，用户客诉成功后，商户需要按照实际的消费金额（如10元）扣费，当服务订单支付状态处于“待支付”时，商户可使用此能力修改订单金额。
 *
 * 注意：
 * • 若此笔订单已收款成功，商户直接使用退款能力，将差价退回用户即可。
 * </pre>
 */
public class WeixinPayScoreModifyOrderRequest extends WeixinPayScoreRequest {
    /**
     * [必填] 后付费项目
     * <p>后付费项目列表，最多包含100条付费项目。
     * 如果传入，用户侧则显示此参数。
     * </p>
     */
    @JsonProperty("post_payments")
    private List<WeixinPayScorePostPayment> postPayments;
    /**
     * 后付费商户优惠
     * <p>
     * 后付费商户优惠列表，最多包含30条商户优惠。
     * 如果传入，用户侧则显示此参数。
     * </p>
     */
    @JsonProperty("post_discounts")
    private List<WeixinPayScorePostDiscounts> postDiscounts;
    /**
     * [必填] 总金额
     * <pre>
     * 总金额，单位为分，不能超过完结订单时候的总金额，只能为整数，详见支付金额。此参数需满足：总金额 =（修改后付费项目1…+修改后完结付费项目n）-（修改 后付费商户优惠项目1…+修改后付费商户优惠项目n）
     * 示例值：50000
     * </pre>
     */
    private Integer totalAmount;
    /**
     * [必填] 修改原因
     * <pre>
     * 按照字符计算，超过长度报错处理。
     * 示例值：用户投诉
     * </pre>
     */
    private String reason;

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public List<WeixinPayScorePostPayment> getPostPayments() {
        return postPayments;
    }

    public void setPostPayments(List<WeixinPayScorePostPayment> postPayments) {
        this.postPayments = postPayments;
    }

    public List<WeixinPayScorePostDiscounts> getPostDiscounts() {
        return postDiscounts;
    }

    public void setPostDiscounts(List<WeixinPayScorePostDiscounts> postDiscounts) {
        this.postDiscounts = postDiscounts;
    }

    public Integer getTotalAmount() {
        return totalAmount;
    }

    public void setTotalAmount(Integer totalAmount) {
        this.totalAmount = totalAmount;
    }
}
